﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Text;
using DAL;
using System.Transactions;
using UtilityExtensions;

namespace BOL.Banco
{
    public class CuentaFinanciamientoBL
    {

        public int Add(int idProyecto,
                       bool bitEsMontoCI,
                       decimal cuotaInicial,
                       int idBancoFinanciera, string comentario,
                       bool bitCuotaEnCuenta)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                

                DAL.CuentaFinanciamiento db = new DAL.CuentaFinanciamiento();

                db.SetAdd(_db,
                            idProyecto,
                            bitEsMontoCI,
                            cuotaInicial,
                            idBancoFinanciera,
                            comentario,
                            bitCuotaEnCuenta,
                            idUsuarioCre);


                //registramos
                _db.SubmitChanges();
                //DataSet dsDiferencias = new DataSet();
                //string CUENTAPROYECTOITEM = "CuentaProyectoItem";



                //if (ds.HasChanges())
                //{
                //    dsDiferencias.Merge(ds.GetChanges());


                //    foreach (DataRow drw in dsDiferencias.Tables[CUENTAPROYECTOITEM].Rows)
                //    {

                //        if (drw.RowState == DataRowState.Added)
                //        {
                //            CuentaProyectoItem e = new CuentaProyectoItem();

                //            var dataRow = (CuentaProyectoItemInfo)Util.DataRowToEntidad(drw, e.GetType());


                //            e.AddSet(_db,
                //                dataRow.idProyecto,
                //                db.idInternal
                //                );
                //        }
                //        _db.SubmitChanges();

                //    }
                //}
                ////actualiza el total
                ts.Complete();
                return db.idInternal;

            }

        }


        public void Update(int idCuentaFinanciamiento,
                            bool bitEsMontoCI,
                            decimal cuotaInicial,
                           string comentario,
                            bool bitCuotaEnCuenta)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                

                var db = _db.CuentaFinanciamientos.Single(p => p.idInternal == idCuentaFinanciamiento);

                db.SetUpdate(_db,
                    bitEsMontoCI,
                    cuotaInicial,
                    comentario,
                    bitCuotaEnCuenta,
                    idUsuarioCre);
                //registramos las UI
                _db.SubmitChanges();
                //DataSet dsDiferencias = new DataSet();
                //string CUENTAPROYECTOITEM = "CuentaProyectoItem";



                //if (ds.HasChanges())
                //{
                //    dsDiferencias.Merge(ds.GetChanges());


                //    foreach (DataRow drw in dsDiferencias.Tables[CUENTAPROYECTOITEM].Rows)
                //    {
                //        if (drw.RowState == DataRowState.Modified)
                //        {


                //            CuentaProyectoItem e = _db.CuentaProyectoItems.Single(p => p.idInternal == drw.Field<int>("idInternal"));

                //            var dataRow = (CuentaProyectoItem)Util.DataRowToEntidad(drw, e.GetType());

                //            e.AddUpdate(_db,
                //                        dataRow.idProyecto);

                //            _db.SubmitChanges();

                //        }

                //        if (drw.RowState == DataRowState.Deleted)
                //        {
                //            drw.RejectChanges();

                //            ProformaItem erol = _db.ProformaItems.Single(p => p.idInternal == drw.Field<int>("idInternal"));
                //            _db.ProformaItems.DeleteOnSubmit(erol);
                //            _db.SubmitChanges();
                //        }

                //        if (drw.RowState == DataRowState.Added)
                //        {
                //            ProformaItem e = new ProformaItem();

                //            var dataRow = (ProformaItemInfo)Util.DataRowToEntidad(drw, e.GetType());

                //            e.SetAdd(_db,
                //              dataRow.idUI,
                //              dataRow.total,
                //              db.idInternal
                //              );
                //        }
                //        _db.SubmitChanges();

                //    }
                //   }

                _db.SubmitChanges();
                ts.Complete();

            }

        }


        public void Delete(int idCuentaFinanciamiento)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                




                var db = _db.CuentaFinanciamientos.Single(p => p.idInternal == idCuentaFinanciamiento);
                _db.CuentaFinanciamientos.DeleteOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();

            }
        }





        public IEnumerable<CuentaFinanciamientoInfo> GetCuentaFinanciacionList(int idProyecto)
        {


            var q = from a in DbUtil.Db.CuentaFinanciamientos
                    where a.idProyecto==idProyecto
                    select new CuentaFinanciamientoInfo
                    {
                        tipoCuotaStr = (a.bitEsMontoCI == true) ? "MONTO" : "PORCENTAJE",
                        CuotaEnCuentaStr = (a.bitCuotaEnCuenta == true) ? "EN CUENTA" : "NO",
                        bancoFinanciero = a.Banco.descripcion,
                        idBancoFinanciero = a.idBanco,
                        comentario = a.comentario,
                        idProyecto = a.idProyecto,
                        idInternal = a.idInternal,
                        cuotaInicial = a.cuotaInicial,
                        bitCuotaEnCuenta=a.bitCuotaEnCuenta,
                        bitMonto=a.bitEsMontoCI==true?true:false,
                        bitPorcentaje=a.bitEsMontoCI==true?false:true
                        
                    };
            return q;


        }
    }
}
